home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Source Code
/
Visual Basic Source Code.iso
/
vbsource
/
vb_mpu
/
mpudemo1.txt
< prev
next >
Wrap
Text File
|
1991-10-11
|
9KB
|
200 lines
' ***************************************************************************
' * *
' * This file is named 'MPUDEMO1.BAS' and was converted from the file *
' * MPUDEMO1.BAS created by By Gino Silvestri [71505,1436] for Turbo Basic. *
' * In addition it uses INOUT.DLL created By Bill Faggart [73075,645] that *
' * gives Visual Basic the ability to access ports. Both of these *
' * individuals are active on Compuserve *
' * There have been no major enhancements to this pgm just a straight port *
' * and the creation of a WAIT function for Visual Basic that mimics the *
' * WAIT function in Turbo Basic. *
' * *
' * Requirements: Requires VBRUN100.DLL and INOUT.DLL *
' * Note: INOUT.DLL must be either in your Windows directory or a directory *
' * on your path statement *
' * WARNING: If you don't HAVE an MPU-401 hooked up, program hangs up! *
' * *
' * Have Fun!! *
' * *
' * Michael Love Graves [72240,1123] *
' ***************************************************************************
' ***************************************************************************
' * D E F I N I T I O N S *
' ***************************************************************************
DefInt A-Z
'
Const True = -1
Const False = 0
Const ComdPort = &H331 ' MPU-401 Command Port on IBM
Const statport = &H331 ' MPU-401 Status Port on IBM
Const DataPort = &H330 ' MPU-401 Data I/O Port on IBM
Const DRR = &H40 ' Mask for Data Read Reg. Bit
Const DSR = &H80 ' Mask for Data Set Ready Bit
Const ACK = &HFE ' MPU-401 Acknowledge Response
Const maskflip = &HFF ' WAIT Function Bit Mask XOR
Const MPUReset = &HFF ' MPU-401 Total Reset Command
Const UARTMode = &H3F ' MPU-401 "Dumb UART Mode"
Const NoteOn1 = &H90 ' MIDI Note On for Channel 1
Const Velocity = 64 ' MIDI Medium Key Velocity
Const NoteOff = 0 ' 0 Velocity = Note Off
Const FirstNote = 36 ' First note synth can play
Const LastNote = 96 ' Last note synth can play
' ***************************************************************************
' * I N I T I A L I Z A T I O N *
' ***************************************************************************
Sub RSTMPU () ' Reset the MPU-401
OUT ComdPort, MPUReset ' Send MPU-401 RESET Command
a = INP(DataPort) ' Dummy read to clear buffer
Wait statport, DRR, maskflip ' Wait for port ready
OUT ComdPort, UARTMode ' Set MPU-401 "Dumb UART" Mode
a = INP(DataPort) ' Dummy Read to clear buffer
Wait statport, DSR, maskflip ' Wait for "UART" port ready -
' Really crucial!!!!
End Sub
' ***************************************************************************
' * M A I N P R O G R A M *
' ***************************************************************************
Sub MpuPlay ()
Form1.text1.text = " MPUDEMO1 playing a fast scale on MIDI Channel 1"
For note = FirstNote To LastNote ' Ascending Scale
Call Playit(note) ' Play a note
Delay 3000 ' Duration of note ON
Call Offit(note) ' Stop that same note
Next ' Play next note
Delay 4000 ' Pause between scales
For note = LastNote To FirstNote Step -1 ' Descending Scales
Call Playit(note) ' Play a note
Delay 3000 ' Duration of note ON
Call Offit(note) ' Stop that same note
Next
Delay 10000 ' Pause between demos
Form1.text1.text = " MPUDEMO1 now playing some chords on MIDI Channel 1"
For n = 1 To 3 ' Playing first chord thrice
note = 65 ' F3
Call Playit(note) ' Start a chord
note = 69 ' A3
Call Playit(note)
note = 72 ' C4
Call Playit(note)
Delay 14000 ' Duration of held chord
note = 65 ' F3
Call Offit(note) ' Stop the chord
note = 69 ' A3
Call Offit(note)
note = 72 ' C4
Call Offit(note)
Delay 14000 ' Duration of rest
Next ' Play chord again
note = 64 ' E3
Call Playit(note) ' Start last chord
note = 67 ' G3
Call Playit(note)
note = 72 ' C4
Call Playit(note)
Delay 32000 ' Duration of held chord
note = 64
Call Offit(note) ' Stop the chord
note = 67
Call Offit(note)
note = 72
Call Offit(note)
Form1.text1.text = " MPUDEMO1 is through - Tinker with it!"
End Sub
' ***************************** Playit SUBROUTINE ***************************
Sub Playit (note As Integer) ' Play a MIDI Note
OUT DataPort, NoteOn1 ' Send Chan. 1 note ON code
a = INP(DataPort) ' Dummy Read to clear buffer *
Wait statport, DRR, maskflip ' Wait for port ready
OUT DataPort, note ' Send note Number to turn ON
a = INP(DataPort) ' Dummy Read to clear buffer *
Wait statport, DRR, maskflip ' Wait for port ready
OUT DataPort, Velocity ' Send medium velocity
a = INP(DataPort) ' Dummy Read to clear buffer *
Wait statport, DRR, maskflip ' Wait for port ready
End Sub
Sub Offit (note) ' Turn off a MIDI Note
'****************************** Offit routine ******************************
' * Note: Read of DataPort prevents hang-up if MIDI IN from a keyboard is
' connected and played - WAIT would stay FOREVER if you hit any key once!
OUT DataPort, NoteOn1 ' Send Chan. 1 note ON code
a = INP(DataPort) ' Dummy Read to clear buffer *
Wait statport, DRR, maskflip ' Wait for port ready
OUT DataPort, note ' Send note number to turn OFF
a = INP(DataPort) ' Dummy Read to clear buffer *
Wait statport, DRR, maskflip ' Wait for port ready
OUT DataPort, NoteOff ' Send 0 Velocity = Note Off
a = INP(DataPort) ' Dummy Read to clear buffer *
Wait statport, DRR, maskflip ' Wait for port ready
End Sub
Sub Delay (count)
For x = 1 To count
Next x
End Sub
' ************************** WAIT subroutine **********************************
' * This routine reads the statport, xor's the data with maskflip (0FFH) and *
' * ANDs it with DRR or DSR (MpuData). *
' *****************************************************************************
'
Sub Wait (statport, Mp